/**
 * Created by stt on 2018/3/2.
 * 组件的api，用于组件中信息的获取和加载
 */

import { Assutils } from '../assutils/';
let myAssutils = new Assutils();
class Assapi {
    constructor(Vue) {
        this._Vue = Vue;
        this.ass_api = {
            taskInfoUrl: '/v1/be/task/apply', //标注任务访问的url，获取vad分段等基本信息，获取一个标客任务 听见使用
            fileListInfoUrl: '/v1/marker-task-data/pageInfo', // 获取文件列表,一个标客任务多个文件 主平台使用
            fileInfoUrl: '/v1/be/mark/file/info', //
            filePathUrl: '/v1/css/file',
            fileRangePathUrl: '/v1/css/file/range', // 获取时间段的音频
            submitUrl: '/v1/be/mark/task/submit', // 提交结果的url
            saveResultUrl: '/v1/be/mark/result', // 保存结果url
            abandonTaskUrl: '/v1/be/mark/task/giveup', //放弃任务url
            repulseTaskUrl: '/v1/be/mark/task/repulse', //  打回 与提交区分，在翻译业务线中使用，其他业务线打回没有迁移到此api
            currentResultUrl: '/v2/result/info', // 获取最新结果
            getResultUrl: '/v2/web/mark/result', // 获取 sdk 2.0 的结果
            historyList: '/v2/result/version', //获取历史结果（优化）
            historyInfo: '/v2/result/info', //获取最新结果（优化）
            currentResultBatchUrl: '/v1/history/result/info/batch', // 获取最新的标注结果（批量）
            step: 0, // 默认是标注页面
            returnUrl: '/user/member/task/mytask', // 返回页面url
            markTaskIsValid: '/v1/marker-task-data/info', // 标客任务是否被回收和放弃
            recoveryUrl: '/v1/be/mark/task/recovery', // 回收
            fileResultInfoUrl: '/v1/marker-task-data/singleResult', // 获取文件列表
            dictionaryDownloadUrl: '/v1/dictionary/getContentBytes', //  下载字典 上传：/v1/dictionary/upload （file key post方式）
        }
    }

    downloadDictionary(dictionaryName, success) {
        return $.ajax({
            url: this.ass_api.dictionaryDownloadUrl + "?key=" + dictionaryName,
            type: 'GET',
            async: false,
            success: function (info) {
                if (myAssutils.isNotNull(info)) {
                    success ? success(info) : '';
                } else {
                    this.ass_api.error('获取字典失败');
                }
            }
        });
    }
    /**
     * 拉取数据信息
     * @param pMarkTaskId
     * @param fetchType
     * @param success
     */
    fetchFileInfo(pMarkTaskId, fetchType, success) {
        var params = {
            'markTaskId': pMarkTaskId,
            "markFileId": fetchType
        };
        // 获取文件信息
        this._Vue.$api.method(this.ass_api.fileInfoUrl, params, "GET").then(data => {
            if (data.rt.status == 200) {
                success ? success(data.data) : '';
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    /**
     * 拉取所有信息
     * @param pMarkTaskId
     * @param success
     */
    getFileInfo(pMarkTaskId, success) {
        this.ass_api.fetchFileInfo(pMarkTaskId, "all", success);
    }
    /**
     * 拉取列表信息，不含默认结果
     * @param pMarkTaskId
     * @param success
     */
    getFileList(pMarkTaskId, success) {
        this.ass_api.fetchFileInfo(pMarkTaskId, "list", success);
    }
    /**
     * 拉取结果,灵活 为了复检功能
     * @param param
     * @param success
     */
    getFileListNew(param, success, error) {
        if (Object.prototype.toString.call(param) !== '[object Object]') {
            console.warn("传入的参数不是对象！");
            return false;
        }
        this.fetchFileInfoNew(param, success, error);
    }
    /**
     * 拉取数据信息
     * @param params 对象,包含参数 {'
     *       markTaskId': pMarkTaskId,
            "markFileId": list,
            "recheck": 1}
     * @param success
     */
    async fetchFileInfoNew(params, success, error) {
        // 获取文件信息
        await this._Vue.$api.method(this.ass_api.fileInfoUrl, params, "GET").then(data => {
            if (data.rt.status == 200) {
                success ? success(data.data) : '';
            } else {
                if (error) {
                    error(data.data);
                } else {
                    this._Vue.$message.error(data.data);
                }
            }
        }).catch(err => {
            console.log(err);
        });
    }
    /**
     * 获取文件默认结果
     * @param pMarkTaskId
     * @param markFileId
     * @param success
     */
    getFileDefaultResultInfo(pMarkTaskId, markFileId, success) {
        this.ass_api.fetchFileInfo(pMarkTaskId, markFileId, success);
    }
    // 获取标客任务列表, 如中文转写业务使用
    async getFileListInfo(pTaskId, pMarkTaskId, success) {
        var params = {
            userid: '',
            data: JSON.stringify({
                'taskId': pTaskId,
                "markTaskId": pMarkTaskId
            })
        };
        // 获取文件信息
        await this._Vue.$api.method(this.ass_api.fileListInfoUrl, params, "GET").then(data => {
            if (data.rt.status == 200) {
                success ? success(data.data) : '';
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    // 获取任务信息
    async getTaskInfo(uriParam, postParam, success) {
        var url = myAssutils.addUriParam(this.ass_api.taskInfoUrl, uriParam);

        await this._Vue.$api.method(url, JSON.stringify(postParam), "POST").then(data => {
            if (data.rt.status == 200) {
                success(JSON.parse(data.data));
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    // 获取音频url
    getFileUrl(uriParam) {
        return myAssutils.addUriParam(this.ass_api.filePathUrl, uriParam);
    }
    // 获取音频url
    getFileRangeUrl(uriParam) {
        return myAssutils.addUriParam(this.ass_api.fileRangePathUrl, uriParam);
    }
    // 获取结果信息
    async getFileResultInfo(uriParam, success) {
        await this._Vue.$api.method(this.ass_api.fileResultInfoUrl, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                success(data.data);
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    // 获取结果信息 （sdk2.0）
    async getResultBySDK(uriParam, success) {
        await this._Vue.$api.method(this.ass_api.getResultUrl, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                success(data.data);
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    // 获取最新结果
    async getCurrentResult(taskId, markTaskId, markTaskFileId, success, isSkipError) {
        var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'final'
        };
        await this._Vue.$api.method(this.ass_api.currentResultUrl, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                if (myAssutils.isNotNull(data.data)) {
                    success(data.data);
                } else {
                    //获取结果为空
                    isOk = false;
                }
            } else {
                if (isSkipError !== true) {
                    this.ass_api.error("获取结果异常...");
                }
                isOk = false;
            }
        }).catch(err => {
            console.log(err)
        }); // 同步
        return isOk;
    }
    // 获取最新结果
    async getHistoryResult(taskId, markTaskId, markTaskFileId, success) {
        var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'history'
        };
        await this._Vue.$api.method(this.ass_api.currentResultUrl, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                if (myAssutils.isNotNull(data.data)) {
                    success(data.data);
                } else {
                    //获取结果为空
                    isOk = false;
                }
            } else {
                // if (isSkipError !== true) {
                //     this.ass_api.error("获取结果异常...");
                // }
                isOk = false;
            }
        }).catch(err => {
            console.error(err);
        }); // 同步
        return isOk;
    }
    //获取历史结果列表
    async getHistoryList(taskId, markTaskId, markTaskFileId, success) {
        var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'history'
        };
        await this._Vue.$api.method(this.ass_api.historyList, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                if (myAssutils.isNotNull(data.data)) {
                    success(data.data);
                } else {
                    //获取结果为空
                    isOk = false;
                }
            } else {
                // if (isSkipError !== true) {
                //     this.ass_api.error("获取结果异常...");
                // }
                isOk = false;
            }
        }).catch(err => {
            console.error(err);
        }); // 同步
        return isOk;
    }
    //获取历史结果详情
    async getHistoryInfo(taskId, markTaskId, markTaskFileId, version, success) {
        var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'history',
            version: version
        };
        await this._Vue.$api.method(this.ass_api.historyInfo, uriParam, "GET").then(data => {
            if (data.rt.status == 200) {
                if (myAssutils.isNotNull(data.data)) {
                    success(data.data);
                } else {
                    //获取结果为空
                    isOk = false;
                }
            } else {
                // if (isSkipError !== true) {
                //     this.ass_api.error("获取结果异常...");
                // }
                isOk = false;
            }
        }).catch(err => {
            console.error(err)
        }); // 同步
        return isOk;
    }
    async getCurrentBatchResult(pTaskId, pMarkTaskId, success, isSkipError) {
        var isOk = true;
        await this._Vue.$api.method(this.ass_api.currentResultBatchUrl, {
            taskId: pTaskId,
            markTaskId: pMarkTaskId
        }, 'GET').then(data => {
            if (data.rt.status == 200) {
                if (myAssutils.isNotNull(data.data)) {
                    success(data.data);
                } else {
                    //获取结果为空
                    isOk = false;
                }
            } else {
                if (isSkipError !== true) {
                    this.ass_api.error("获取结果异常...");
                }
                isOk = false;
            }
        }).catch(err => {
            console.error(err);
        }); //  同步获取
        return isOk;
    }
    // 保存结果
    async saveResult(uriParam, postParam, success, async, errorCallBack) {
        if (async !==false) async = true; //默认异步操作
        var saveUrlEx = myAssutils.addUriParam(this.ass_api.saveResultUrl, uriParam);
        await this._Vue.$api.method(saveUrlEx, JSON.stringify(postParam), "POST").then(data => {
            if (data.rt.status == 200) {
                this._Vue.$message("结果保存成功！");
                success ? success() : '';
            } else if (data.rt.status == 200101) {
                this._Vue.$message("该任务已被回收或放弃!", "/user/member/task/mytask");
                errorCallBack ? errorCallBack(data.data) : '';
            } else if (data.rt.status == 200107) {
                this._Vue.$message("该任务已下架!", "/user/member/task/mytask");
                errorCallBack ? errorCallBack(data.data) : '';
            } else if (data.rt.status == 200201) {
                this._Vue.$message("该批次已删除!", "/user/member/task/mytask");
                errorCallBack ? errorCallBack(data.data) : '';
            } else if (data.rt.status == 200102) {
                this._Vue.$message("该任务已删除!", "/user/member/task/mytask");
                errorCallBack ? errorCallBack(data.data) : '';
            } else if (data.rt.status == 200402) {
                this._Vue.$message("该任务已被回收或转移!", "/user/member/task/mytask");
                errorCallBack ? errorCallBack(data.data) : '';
            } else {
                this._Vue.$message("保存失败：" + data.data);
                errorCallBack ? errorCallBack(data.data) : '';
            }
        }).catch(error => {
            this._Vue.$message("保存失败：" + error);
            errorCallBack ? errorCallBack(error) : '';
        });
    }
    // 判断是否已经被回收
    async isHasRecovery(pTaskId, pMarkTaskId, success) {
        await this._Vue.$spi.method(this.ass_api.markTaskIsValid, {
            taskId: pTaskId,
            markTaskId: pMarkTaskId
        }, 'GET').then(data => {
            if (data.rt.status == 200) {
                if (data.data.status == 21) {
                    this.ass_api.prompt("标客任务已" + (data.data.source == 0 ? '回收' : data.data.source == 1 ? '放弃' : '失效'));
                } else {
                    success ? success() : '';
                }
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.log(err);
        });
    }
    // 进行回收操作
    async recovery(pMarkTaskId, success) {
        var url = this.ass_api.recoveryUrl + '?markTaskIds=' + pMarkTaskId;
        await this._Vue.$api.method(url, {}, "POST").then(data => {
            if (data.rt.status == 200) {
                this.ass_api.prompt('由于长时间未操作或者超过任务时间，任务被系统回收');
            } else if (data.rt.status == 200001) {
                this.ass_api.error('该任务已回收不能重复回收...');
            } else if (data.rt.status == 200002) {
                this.ass_api.error('已提交的任务不能进行回收...');
            } else {
                this.ass_api.error(data.data);
            }
            success ? success() : '';
        }).catch(err => {
            console.log(err);
        });
    }
    abandonTask(pMarkTaskId) {
        this.$confirm("任务放弃后不可恢复，放弃后你将回到任务列表你还要继续吗？", "提示", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            })
            .then(() => {
                var url = this.ass_api.abandonTaskUrl + '?markTaskId=' + pMarkTaskId + '&IFLYTEK_CSRFTOKEN=' + myAssutils.getCookie('IFLYTEK_CSRFTOKEN');
                this._Vue.$api.method(url, {}, "POST").then(data => {
                    if (data.rt.status == 200) {
                        this.ass_api.prompt('放弃成功');
                    } else {
                        this.ass_api.error(data.data);
                    }
                }).catch(err => {
                    console.log(err);
                });
            })
            .catch((error) => {
                console.log(error);
            });
    }
    closeResult(step) {
        if (step == undefined) step = 0;
        if (window.opener == null) {
            window.location.href = myAssutils.addUriParam(this.ass_api.returnUrl, {
                tasktype: step
            });
        } else {
            // 跳转到父tab页并刷新
            window.opener.location.href = myAssutils.addUriParam(this.ass_api.returnUrl, {
                tasktype: step
            });
            window.close();
        }
    }
    async submitTask(pMarkTaskId, postParams, success) {
        var url = this.ass_api.submitUrl + '?markTaskId=' + pMarkTaskId;
        await this._Vue.$api.method(url, postParams, "POST").then(data => {
            if (data.rt.status == 200) {
                success ? success() : '';
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.error(err)
        });
    }
    async repulseTask(pMarkTaskId, putParams, success) {
        var url = this.ass_api.repulseTaskUrl + '?markTaskId=' + pMarkTaskId;
        await this._Vue.$api.method(url, putParams, "PUT").then(data => {
            if (data.rt.status == 200) {
                success ? success() : '';
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.error(err)
        });
    }
    // 领取下一条 直接跳转 获取 下一条信息 跳转
    async getNextTask(uriParams, postParams, success) {
        var taskInfoUrl = myAssutils.addUriParam(this.ass_api.taskInfoUrl, uriParams);
        await this._Vue.$api.method(taskInfoUrl, JSON.stringify(postParams), "POST").then(data => {
            success ? success() : '';
            if (data.rt.status == 200) {
                // 获取当前数据，只有一条
                var taskInfo = JSON.parse(data.data)[0];
                if (taskInfo.step == 0) {
                    window.location.href = "/assets/home/mark-page?taskId=" + taskInfo.taskId + "&markTaskId=" + taskInfo.markTaskId;
                } else if (taskInfo.step == 1) {
                    window.location.href = "/assets/home/mark-page?taskId=" + taskInfo.taskId + "&markTaskId=" + taskInfo.markTaskId;
                } else if (taskInfo.step == 3 || taskInfo.step == 4) {
                    window.location.href = "/assets/home/mark-page?taskId=" + taskInfo.taskId + "&markTaskId=" + taskInfo.markTaskId;
                } else {
                    this.ass_api.error('获取页面类型错误...');
                }
            } else if (data.rt.status == 100201) {
                this.ass_api.prompt('已没有可以领取的任务');
            } else {
                this.ass_api.error(data.data);
            }
        }).catch(err => {
            console.error(err)
        });
    }
}
export {Assapi}